Pulumi 創立於 2017 年,由前微軟工程師 Joe Duffy、前微軟副總 Eric Rudder、前 AWS 產品經理 Luke Hoban 共同創立。
Joe 在微軟工作的時候,就擔任開發工具的技術總監,開發者工具,並將 .NET 平台推向現在的開源、跨平台。
一開始, Joe 只是想要做一個工具,可以用來建置雲端環境。後來越做越發現這就是 IaC 的概念。且當時在 AWS 擔任產品經理的 Luke 也對這個方案有同樣的理想。
在 2018 年 6 月的時候 Pulumi 釋出第一個版本,同時也使用 Open Source License 至今。
最近因為知名 IaC 工具 Terraform 宣布將 License 修改為 BSL 後,Pulumi 還特別發表一篇部落格文章強調 Pulumi 過去是 Open Source,現在是 Open Source,未來也還會是 Open Source。
目前 Pulumi 也是雲原生計算基金會 (CNFN) 的銀級會員。
在上一篇文章中,只有說到我怎麼認識 Pulumi、為何想要學習並轉換到 Pulumi,但並沒有介紹 Pulumi 是個怎麼樣的工具。
Pulumi 是一套開源的 IaC 工具,支援多種程式語言撰寫 IaC。包含 TypeScript、JavaScript、Python、Go、.NET (C#、VB、F#)、Java、YAML。
Pulumi 的套件市集 (Package Marketplace) 上有超過 100 種以上的 Package 可供選用,大部分常見的雲端供應商 (Cloud Provider)、SaaS 服務都有提供對應的套件可供使用。
另外如果套件市集上沒有需要的東西怎麼辦?
Pulumi 還提供了很多的轉接層可以使用,例如 Pulumi CDK Adapter、Pulumi Terraform Bridge。如果這些都沒辦法滿足,還可以直接定義自己的 Dynamic Provider。不過 Dynamic Provider 只能支援所撰寫的程式語言,如果要做到與其他 Pulumi 支援多種程式語言的 Provider 的話,就得參考 Pulumi Provider 開發的文件。
另外使用慣用的程式語言來撰寫 IaC 最大的好處就在於該程式語言所提供的龐大生態系統了。我們可以在專案中安裝我們常用的套件來輔助我們做 IaC。例如我想要產生隨機密碼,我可以安裝亂數的套件。我想要計算 IP address,可以安裝 IP address calculator 有關的套件。甚至我可以安裝 PDF 的套件,將依些文件轉換為 PDF 後,再透過 Pulumi 的 S3 資源,將 PDF 文件上傳到 S3 中(這應用會不會太超過)。之後我們也會介紹到 Pulumi 的 Serverless 套件,讓我們直接在 IaC 中撰寫 Serverless 的應用程式。
了解自動化工具的人,一定聽過宣告式 (Declarative)、命令式 (Imperative) 這兩個概念。那這兩個的差別在哪呢?
命令式:
假設我們直接使用 AWS 的 SDK 來建立雲端資源,那麼我們就需要注意我們每個 API call 的呼叫順序,這個呼叫順序會影響到雲端資源的建立順序。例如我們不能在沒有 VPC 的狀況下就建立 Subnet。
宣告式:
有使用過 Terraform 的讀者就知道,在 Terraform 裡面,resource 擺放的順序不會影響到雲端資源建立的順序,Terraform 執行引擎會去想辦法找出一個最合理的順序,幫我們建立雲端資源。
那在 Pulumi 中又是怎麼處理的呢?
Pulumi 的運作方式比較特別,它是使用程式語言編寫 IaC。前面提到支援的程式語言幾乎都是命令式的,也就是說我無法在一個變數宣告之前就去存取它的內容。那們我們可以說 Pulumi 是命令式的 IaC 工具嗎?
不,Pulumi 其實屬於宣告式的 IaC 工具。因為 Pulumi 允許我們在 IaC 的資源中去定義關聯性 (dependency),而 Pulumi 引擎執行完我們的程式碼後,其實會產生一個資源的關聯圖與我們想要達成的狀態 (Desire state)。再由引擎去執行這些資源的 CRUD。
這應該是很多人的疑問,如果我已經有一些既有的 IaC 了,那們我有轉換到 Pulumi 是不是得全部打掉重寫,然後慢慢將狀態匯入到 Pulumi 中呢?
幸好 Pulumi 已經考慮到這件事了,Pulumi 提供了完整的平滑遷移方案,甚至可以在 Pulumi 專案中去參考其他 IaC 工具的狀態。
例如 Pulumi 提供了套件可以參考 Terraform 的狀態,使用者可以逐步去遷移 IaC 到 Pulumi,也可以同時使用多套 IaC 框架。例如 Infra Team 繼續使用 Terraform 維護 Cloud Infra 的資源 (VPC、Subnet 等),而 Product Team 使用 Pulumi 去參考 Infra Team 的 Terraform State。
另外像是 AWS CDK、AWS CloudFormation、Azure Resource Manager 等 IaC 工具,Pulumi 都有提供遷移方案。詳細的資料可以參考官方的 Migrate 文件
下一篇開始,我們就要正式開始安裝、使用 Pulumi 了!